package com.sxt.sys.controller;

import com.sxt.sys.common.ActiverUser;
import com.sxt.sys.common.ResultObj;
import com.sxt.sys.common.WebUtils;
import com.sxt.sys.entity.Loginfo;
import com.sxt.sys.service.ILoginfoService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 大宝
 * @since 2020-08-21
 */

@RestController
@RequestMapping("login")
public class LoginController {


    @Autowired
    private ILoginfoService loginfoService;

    @RequestMapping("login")
    public ResultObj login(String loginname,String pwd){
        //获取当前登录的实体
        Subject subject= SecurityUtils.getSubject();
        // 把用户名和密码封装为 UsernamePasswordToken 对象
        AuthenticationToken token=new UsernamePasswordToken(loginname,pwd );
        try{
            subject.login(token);               //调用UserRealm中的方法进行权限认证返回  info
            //subject.getPrincipal();是UserRealm中SimpleAuthenticationInfo
            // (activerUser,user.getPwd(),credentialsSalt,this.getName());
            //中的第一个参数，即获取当前登录用户的全部信息
            ActiverUser activerUser= (ActiverUser) subject.getPrincipal();
            WebUtils.getSession().setAttribute("user",activerUser.getUser());
            //记录登录日志
            Loginfo entity=new Loginfo();
            entity.setLoginname(activerUser.getUser().getName()+"-"+activerUser.getUser().getLoginname());
            entity.setLoginip(WebUtils.getRequest().getRemoteAddr());
            entity.setLogintime(new Date());
            loginfoService.save(entity);

            return ResultObj.LOGIN_SUCCESS;

        }catch (AuthenticationException e){
            e.printStackTrace();
            return ResultObj.LOGIN_ERROR_PASS;
        }
    }





}
